package cn.tedu.collection;


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/*本类用于测试泛型的优点1*/
public class TestGeneric1 {
    public static void main(String[] args) {
        /*1.泛型是怎么来的?--集合想要模拟数组的数据类型检查*///模拟数组的数据类型检查(数据类型都要相同)
        String[] a = new String[5];//创建一个用来存放String类型数据的数组,长度5
        a[2] = "泡泡";
        a[4] = "涛涛";
        //数组的好处:在编译时期检查数据的类型,如果不是要求的数据类型就会报错
        //a[0] = 1;
//        a[1] = 8.8;
        //a[3] = 'c';
        /*2.泛型通常结合着集合一起使用*/ //泛型结合集合
        /*3.引入泛型--主要目的是想通过泛型来约束集合中的元素类型 //泛型约束集合中的元素类型
         * 4.引入泛型的好处:可以把报错的时机提前,在编译期就报错,而不是运行后才抛出异常 //编译器就提前报错,和数组编译报错一样,类似
         * 向集合中添加元素时,会先检查元素的数据类型,不是要求的类型就编译失败*/ //添加集合元素,通过泛型检查元素的数据类型
        List list = new ArrayList();//注意导包:java.util
        //没有泛型,数据类型根本没有约束--太自由!
        System.out.println(list.add("江江"));
        System.out.println(list.add(1));
        list.add(8.8);//多态:只有对象直接调用子类方法才考虑父类方法的重写
        list.add('a');//分为1)直接调用方法和2)地址值打印调用子类含有或继承来的toString方法
        //sout多态对象是,底层做了处理,还是调用子类重写的toString方法,和父类接口无关
        //sout里面,多态的父类引用指向子类对象的对象,没有调用重写的方法,就是使用子类自己继承的重写,,打印多态对象,就是使用子类对象继承来的toString方法,
        System.out.println(list); //打印的对象,sout是调用的重写了toString()方法的子类对象//父类引用指向子类对象//不是多态的思想,调用父类的方法
        //多态对象打印地址值和父类无关,只是子类的继承来的重写的toSting方法有关,

        System.out.println(Arrays.toString(list.toArray()));


        List<String> list2 = new ArrayList();
        list2.add("雷神");//约束了类型以后,只可以传String类型的数据//约束了类型
//        list2.add(1);
//        list2.add(1.1);
//        list2.add('c');
        System.out.println(list2);




        //创建一个存放数据100 200 300 的集合
        /*5.<type>--type的值应该如何写?
         * 需要查看集合要存放的数据类型是什么,根据类型来定义
         * 但注意:type必须是引用类型,不是基本类型*/
        //List<int> list3 = new ArrayList();
//        List<Short> list3 = new ArrayList();  //TDL: 为什么不能使用Integer以外的整型类型
//        List<Float> list3 = new ArrayList();  //TDL: 为什么不能使用Integer以外的整型类型
        List<Float> list3 = new ArrayList();
//        List<Float> list3 = new ArrayList();
//        list3.add((short) 100);
//        list3.add((short) 10f);     //引用类型值,只有
        list3.add((float) 10);
//        list3.add(200);
//        list3.add(300);
        System.out.println(list3);

        float f = 3.14f;
        double d = f;
        float f1 = (float) 3.14; //

        long l = 10;
        float f2 = 2;

        System.out.println(Long.MIN_VALUE);
        System.out.println(Long.MAX_VALUE);

        System.out.println(Float.MIN_VALUE);
        System.out.println(Float.MAX_VALUE);

        System.out.println(Double.MIN_VALUE);
        System.out.println(Double.MAX_VALUE);

    }
}
